package com.example.labtest.service;

import com.example.labtest.domain.StudentGrade;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import javax.transaction.Transactional;
import java.util.List;

public interface StudentGradeService {

    /**
     * 读取所有的学生信息数据
     * @return
     */
    List<StudentGrade> findAll();

    /**
     * 只支持分页的查询
     * @param pageable
     * @return
     */
    Page<StudentGrade> findAll(Pageable pageable);


    /**
     * 分页，带过滤的查询,按照Student来过滤
     */
    public Page<StudentGrade>findAll(Example<StudentGrade> grade, Pageable pageable);




//    //接口
//    public List<StudentGrade>findByNameAndPsw(String sname, String psw);

    /**
     * 插入学生

     */
    /**
     *
     * @Transactional可以说是spring中最常用的注解之一了，
     * 通常情况下我们在需要对一个service方法添加事务时，加上这个注解，如果发生unchecked
     *exception，就会发生rollback，最典型的例子如下。
     */
    @Transactional
    StudentGrade insert(StudentGrade studentGrade);


    /**
     * 更新学生
     * @param studentGrade
     * @return
     */
    @Transactional
    StudentGrade update(StudentGrade studentGrade);


    /**
     * 删除学生
     * @param id
     */
    @Transactional
    void delete1(Long id);

    /**
     * 删除学生
     */

    void delete2(StudentGrade studentGrade);


    void delete(Long id);

    /**
     * 查找学生
     * @param id
     * @return
     */
    @Transactional
    StudentGrade search(Long id);

    @Transactional
    StudentGrade getById(Long id);


    /**
     * 按名字查询学生信息
     * @param name
     * @return
     */
    @Transactional
    List<StudentGrade> findByName(String name);

    /**
     * 分页按名字查找学生信息

     */

    Page<StudentGrade>findBySName(String sname, Pageable pageable);

    Page<StudentGrade>findByNameLike(String name, Pageable pageable);
}


